package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.UtilString;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.PropuestosDelegate;
	import com.sodimac.v2s.events.cargarProdPropuestosEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	import com.sodimac.v2s.vo.ProductoPropVO;
	
	import mx.collections.ArrayCollection;
	import mx.rpc.IResponder;

	public class obtenerProdPropuestosCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var strMetodo:String ="";
		
		public function execute(event:CairngormEvent):void
		{
			var delegate:PropuestosDelegate = new PropuestosDelegate(this);
			var prodEvt:cargarProdPropuestosEvent = cargarProdPropuestosEvent(event);
			strMetodo = prodEvt.metodo;

			if (UtilString.equalsIgnoreCase(strMetodo, "consultaProductosPropuestos"))
			{
					delegate.ConsultaProductosConfirmacionPais(modelo.cabecera, 
															   prodEvt.idPais, 
															   prodEvt.idEmpresa,
															   prodEvt.idPedidoCorp);
			} 

			
		}
		
        public function result(obj: Object): void
        {            
			var xml:XML = new XML(obj.result);
			var xmlList:XMLList;
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;			
			trace("WS ConsultaProductosPropuestos response id=" +result);

	  	      switch (result){
	  	      case 0:   //Ok

	  	      			var xmlInfo:XMLList; 
	  	      			
						if (UtilString.equalsIgnoreCase(strMetodo, "consultaProductosPropuestos"))
						{
							xmlInfo = xmlList.payload.productosConfirmacionPais;
							procesaProductosPropuestos(xmlInfo);
						} 
						if (UtilString.equalsIgnoreCase(strMetodo, "EmitirOrdenDeCompra"))
						{
							xmlInfo = xmlList.payload.productosConfirmacionPais;
							procesaProductosPropuestosOC(xmlInfo);
						} 


	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break;                  	      						
	  	      }


        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha Ocurrido un error al consultar Productos.");
        }	 
		
		
		private function procesaProductosPropuestos(prodList:XMLList):void 
		{
			//trace(" ------- cargarProductosCommand.procesaProductosPropuestos ----------- ");
			//trace(prodList);
			//trace(" ------------------- ");
			
			var prodPropArr:ArrayCollection = new ArrayCollection();
			for each(var producto:XML in prodList.producto)			
			{
                 var tmpProd:ProductoPropVO = new ProductoPropVO();
 				 tmpProd.vin = producto.vin;
                 tmpProd.ean = producto.ean;
                 tmpProd.desc = producto.description;
				 tmpProd.unit_price = producto.unitPrice;
				 tmpProd.unit_kgs = producto.unitKgs;
				 tmpProd.unit_cbm = producto.unitCbm;
				 tmpProd.moneda = producto.moneda;
				 tmpProd.case_pack = producto.qtyCasepack;
				 tmpProd.sku = producto.sku;
				 tmpProd.quantity = producto.originalQty;
				 tmpProd.quantity_new = producto.proposedQty;
				 tmpProd.quantity_proposed = producto.proposedQty;
				 tmpProd.estadoProd = UtilString.equalsIgnoreCase(producto.estadoProd, "omitido")? true:false;
				 tmpProd.estadoProd_original = tmpProd.estadoProd; 
				 tmpProd.sub_price = tmpProd.quantity * tmpProd.unit_price;
				 tmpProd.sub_kgs   = tmpProd.quantity * tmpProd.unit_kgs;
				 tmpProd.sub_cbm   = tmpProd.quantity * tmpProd.unit_cbm;
				 
				 prodPropArr.addItem(tmpProd);                          
            }
            modelo.prodPropData = prodPropArr;
            trace('--> prodPropData con datos');
		}		


		private function procesaProductosPropuestosOC(prodList:XMLList):void 
		{

			trace(" ------- cargarProductosCommand.procesaProductosPropuestos OC ----------- ");
			trace(prodList);
			trace(" ------------------- ");


			var prodPropArr:ArrayCollection = new ArrayCollection();
			var i:int =0;
			for each(var producto:XML in prodList.producto)			
			{
                 var tmpProd:ProductoPropVO = new ProductoPropVO();
 				 tmpProd.vin = producto.vin;
                 tmpProd.ean = producto.ean;
                 tmpProd.desc = producto.description;
				 tmpProd.unit_price = producto.unitPrice;
				 tmpProd.unit_kgs = producto.unitKgs;
				 tmpProd.unit_cbm = producto.unitCbm;
				 tmpProd.case_pack = producto.qtyCasepack;
				 tmpProd.sku = producto.sku;
				 tmpProd.moneda = producto.moneda;
				 tmpProd.quantity = producto.originalQty;
				 tmpProd.quantity_new = producto.proposedQty;
				 tmpProd.quantity_proposed = producto.proposedQty;
				 tmpProd.estadoProd = UtilString.equalsIgnoreCase(producto.estadoProd, "omitido")? true:false;
				 tmpProd.estadoProd_original = tmpProd.estadoProd; 
				 tmpProd.sub_price = tmpProd.quantity * tmpProd.unit_price;
				 tmpProd.sub_kgs   = tmpProd.quantity * tmpProd.unit_kgs;
				 tmpProd.sub_cbm   = tmpProd.quantity * tmpProd.unit_cbm;
				 
				 //enviar sólo productos no omitidos y cantidades > a cero.
				 if ( (!tmpProd.estadoProd) &&  (tmpProd.quantity_new >0))
				 {
				 	prodPropArr.addItem(tmpProd);
				 }
				 i++;	                          
            }
            modelo.prodPropData = prodPropArr;
            trace('total productos (con omitidos y ceros) : ' + i);
            trace('--> prodPropData OC con datos');
		}	



	}
}